package LeetCode.leetcode454;

import java.util.HashMap;
import java.util.function.BiFunction;

public class Main {
    public static void main(String[] args) {

    }

    public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
        HashMap<Integer, Integer> map = new HashMap<>();
        int repeatCount = 0;
        for (int i = 0; i < nums1.length; i++) {
            for (int j = 0; j < nums2.length; j++) {
                /**
                 * 更新
                 */
//                if (map.containsKey(nums1[i] + nums2[j])) {
//                    map.put(nums1[i] + nums2[j], map.get(nums1[i] + nums2[j]) + 1);
//                } else {
//                    map.put(nums1[i] + nums2[j], 1);
//                }
                /**
                 * 使用compute函数 + lambda表达式 提升44ms的执行时间 + 0.3MB的内存控件
                 */
                map.compute(nums1[i] + nums2[j], (k, v) -> (v == null) ? 1 : v + 1);
            }
        }
        for (int i = 0; i < nums3.length; i++) {
            for (int j = 0; j < nums4.length; j++) {
                if (map.containsKey(-(nums3[i] + nums4[j]))) {
                    repeatCount += map.get(-(nums3[i] + nums4[j]));
                }
            }
        }
        return repeatCount;
    }

    /**
     * review
     *
     * @param nums1
     * @param nums2
     * @param nums3
     * @param nums4
     * @return
     */
    public int fourSumCount2(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
        HashMap<Integer, Integer> map = new HashMap<>();
        int resCount = 0;
        for (int i : nums1) {
            //装到map中
            for (int j : nums2) {
                map.compute(i + j, (k, v) -> (v == null) ? 1 : v + 1);
            }
        }
        //从map中取出
        for (int i : nums3) {
            for (int j : nums4) {
                if (map.containsKey(-(i + j))) {
                    resCount += map.get(-(i + j));
                }
            }
        }
        return resCount;
    }
}
